/*****************************************************
 * 予算・支出総額の複合結果一覧データを表すデータクラス
 * @author kino
 *****************************************************/
function CompoundResults(){
	/** プロパティの継承 */
	AbstractResults.call(this, ItemType.COMPOUND);
}

/** メソッドの継承 */
ClassUtility.inherit(CompoundResults, AbstractResults);

/**
 * 
 * @param {Object} evaledJson response/result 以下
 */
CompoundResults.prototype.fromJson = function(evaledJson){
	if(evaledJson.type != this.itemType){
		throw new Error('想定外のデータ型: require=' + this.itemType + ' actual=' + evaledJson.type);
	}
	this.length = 0;
    for (var i = 0; i < evaledJson.rows.length; i++) {
        var result = new CompoundResult();
        result.fromJson(evaledJson.rows[i]);
        this.push(result);
    }
}

/*****************************************************
 * 予算・支出項目の複合結果の1行分のデータ。
 * @param {int} budgetId 予算項目の識別子
 * @param {String} budgetName 予算項目の表示名
 * @param {int} budget 予算総額
 * @param {int} outgoing 支出金額
 *****************************************************/
function CompoundResult(budgetId, budgetName, budget, outgoing){
    /** {int} 予算項目の識別子 */
    this.budgetId = budgetId;
    
    /** {String} 予算項目の表示名 */
    this.budgetName = budgetName;
    
    /** {int} 予算総額 */
    this.budget = budget;
    
    /** {int} 支出金額 */
    this.outgoing = outgoing;
    
    /** {int} 差分（残予算） */
    this.delta = this.budget - this.outgoing;
}

/**
 * メイン画面の結果一覧の1行分のデータをJSON形式で表した文字列を返す。
 */
CompoundResult.prototype.toJson = function(){
    var resultParts = new Array();
    resultParts.push('{"budgetId":');
    resultParts.push(this.budgetId);
    resultParts.push(', "budgetName":"');
    resultParts.push(this.budgetName);
    resultParts.push('", "budget":');
    resultParts.push(this.budget);
    resultParts.push(', "outgoing":');
    resultParts.push(this.outgoing);
    resultParts.push('}');
    return resultParts.join('');
}


/**
 * メイン画面の結果一覧の1行分のデータに相当するJSON表現をeval()した結果オブジェクトから、データを復元する。
 * @param {JSON} evaledJson eval()したJSON表現。
 */
CompoundResult.prototype.fromJson = function(evaledJson){
    this.budgetId = evaledJson.budgetId;
    this.budgetName = evaledJson.budgetName;
    this.budget = evaledJson.budget;
    this.outgoing = evaledJson.outgoing;
    this.delta = this.budget - this.outgoing;
}
